package common

import (
	"context"
	"fmt"
	"github.com/zeromicro/go-zero/core/stores/redis"
	"log"
	"private-domain-overseas-service/tools/ent"
	"private-domain-overseas-service/tools/ent/hzsystemconfig"
)

// GetSystemConfig 根据key值查询配置value值
// 参数:
//   - redisKey: Redis中的哈希表key
//   - systemKey: 要查询的配置项key
//   - redisClient: Redis客户端
//   - ormClient: 数据库ORM客户端
//
// 返回值:
//   - string: 配置值
//   - error: 错误信息
func GetSystemConfig(redisKey, systemKey string, redisClient *redis.Redis, ormClient *ent.Client) (string, error) {
	ctx := context.Background()

	// 1. 优先从Redis获取
	value, err := redisClient.Hget(redisKey, systemKey)
	if err == nil && value != "" {
		return value, nil
	}

	// 2. Redis中没有或出错，从数据库获取
	systemConfig, err := ormClient.HzSystemConfig.
		Query().
		Where(hzsystemconfig.SystemKeyEQ(systemKey)).
		First(ctx)
	if err != nil {
		return "", fmt.Errorf("从数据库中获取配置信息失败： %v", err)
	}

	// 3. 将获取到的配置写入Redis（异步，不阻塞主流程）
	go func() {
		if err := redisClient.Hset(redisKey, systemConfig.SystemKey, systemConfig.SystemValue); err != nil {
			log.Printf("配置信息存入缓存失败 %v", err)
		}
	}()

	return systemConfig.SystemValue, nil
}
